In the latter half of the twentieth century, there began a phenomenon known as the information revolution. While the information revolution is a historical development broader in scope than any one event or machine, no single device has come to represent the information revolution more than the digital electronic computer. The development of computer systems has surely been a revolution. Each year, computer systems grow faster, store more data, and provide more applications to their users.
A modern computer system is an enormously complex machine, usually having many sub-parts or subsystems, each of which may be concurrently performing different functions in a cooperative, although partially autonomous, manner. Typically, the system comprises one or more central processing units (CPUs) which form the heart of the system, and which execute instructions contained in computer programs. Instructions and other data required by the programs executed by the CPUs are stored in memory, which often contains many heterogenous components and is hierarchical in design, containing a base memory or main memory and various caches at one or more levels. At another level, data is also stored in mass storage devices such as rotating disk drives, tape drives, and the like, from which it may be retrieved and loaded into memory. The system also includes hardware necessary to communicate with the outside world, such as input/output controllers; I/O devices attached thereto such as keyboards, monitors, printers, and so forth; and external communication devices for communicating with other digital systems.
Various communications architectures or protocols are available to support communicating data among various components of a computer system. High-speed wide parallel buses are typically used to transmit data between memory and the CPUs. One or more separate I/O buses, such as a well-known Peripheral Component Interface (PCI) bus, may be used to communicate with storage and other peripheral devices and adapters. Other types of I/O network connections may be used for peripheral or other devices which are somewhat more remote. In order to keep pace with the ever increasing needs of data transfer and number and variety of peripheral or remote devices, new and improved communications architectures have been introduced.
One new type of I/O network is known and referred to as the InfiniBand network. InfiniBand is a packet-switched, narrow parallel network connection with zero or more routers, operating at a high data rate. InfiniBand has a greater physical range than a conventional PCI bus, and thus may be used to reach peripheral devices located more remotely (i.e., outside a cabinet in which the computer system is housed). A host channel adapter (HCA) couples the processor to a subnet, and target channel adapters (TCAs) couple the peripherals to the subnet. The subnet typically includes at least one switch, and links that connect the HCA and the TCAs to the switches (although it is possible to have a subnet containing only a link, and no switches). For example, a simple InfiniBand network may have one switch, to which the HCA and the TCAs connect through links. Topologies that are more complex are also possible.
InfiniBand networks can interconnect with local or wide area communication networks. For instance, an Ethernet network adapter can be installed that enables communication over an Ethernet network, which is a common type of communication network. The network adapter has its own TCA for coupling to the InfiniBand network. The InfiniBand specification provides a raw datagram mode of communication to bridge packets received from an Ethernet network for transmission over an InfiniBand network, and vice-versa. Similarly, InfiniBand networks may include routers or adapters to connect to the Internet.
InfiniBand networks provide for communication between TCAs and HCAs in a variety of different manners. In the InfiniBand network, data flows between end nodes on logical connections known as Queue Pairs (QPs) across a switched point-to-point fabric. A typical InfiniBand network may support multiple concurrent queue pair logical connections from a single physical network adapter, enabling a single device to communicate with multiple devices coupled to the network. Like other types of networks, InfiniBand networks have a physical layer, a link layer, a network layer, a transport layer, and upper-level protocols. As in other types of packet-switching networks, in InfiniBand networks particular transactions are divided into messages, which themselves are divided into packets for delivery over an InfiniBand network. When received by the intended recipient, the packets are reordered into the constituent messages of a given transaction. InfiniBand networks provide for queues and channels at which the packets are received and sent.
In order to support a range of different transport services, InfiniBand networks allow connections classified as reliable or unreliable, datagrams classified as reliable or unreliable, and raw packet support. In unreliable connections and datagrams, acknowledgments are not generated, and packet ordering is not guaranteed.
Reliable InfiniBand connections and datagrams have greater restrictions imposed on the message protocol. Packets are sent having sequence numbers in a sequential order. When receiving data on a reliable connection or datagram, the receiver should acknowledge packets received. The receiver should also detect any missing packets and report the error back to the sender, as well as detect and respond to duplicate packets. When missing packets are detected, the receiver continues to process and acknowledge packets received up to the missing packet.
Implementation of the various requirements of an InfiniBand receiver typically requires significant complexity in design. A need exists for a simple and effective receiver mechanism for receiving data on an InfiniBand or similar network, particularly on a reliable connection or datagram of an InfiniBand network, which implements the various requirements of the network in a straightforward manner. More specifically, a purely hardware implementation which can easily accommodate the high transmission rates of InfiniBand data is desirable.